using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._BusinessAnalystTools._SuitabilityAnalysis
{
    /// <summary>
    /// <para>Set Criteria Properties</para>
    /// <para>Define parameters for criteria.</para>
    /// <para>定义条件的参数。</para>
    /// </summary>    
    [DisplayName("Set Criteria Properties")]
    public class SetCriteriaProperties : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SetCriteriaProperties()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_analysis_layer">
        /// <para>Input Suitability Analysis Layer</para>
        /// <para>The Suitability Analysis layer that will be used in the analysis.</para>
        /// <para>将在分析中使用的适宜性分析图层。</para>
        /// </param>
        /// <param name="_criteria_properties">
        /// <para>Criteria Properties</para>
        /// <para><xdoc>
        ///   <para>The input features that will be used to set up your criteria properties.</para>
        ///   <para>Criterion—The field, point, or variable that will be used to calculate your suitability score.</para>
        ///   <para>Title—The name of your criteria.</para>
        ///   <para>Weight—The influence a criteria value has on the overall suitability score. The number must be greater than or equal to 0.</para>
        ///   <para>Influence—Can be positive, inverse, or ideal. An example of a positive influence is as follows: You want a site to score higher if it has a greater number of households holding graduate or professional degrees. An example of an inverse influence is as follows: A lower median home value is more desirable as it is indicative of greater home affordability. An example of an ideal influence would be a search for areas within a range of values.
        ///   <bulletList>
        ///     <bullet_item>Positive—The higher the criteria value, the higher the suitability score.  </bullet_item><para/>
        ///     <bullet_item>Inverse—The lower the criteria value, the higher the suitability score.  </bullet_item><para/>
        ///     <bullet_item>Ideal—The closer to the ideal value, the higher the score.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Ideal Value—The closer the criteria value is to the ideal value, the higher the suitability score.</para>
        ///   <para>Minimum Value—A numeric value that sets a hard limit for the criteria lower bound.</para>
        ///   <para>Maximum Value—A numeric value that sets a hard limit for the criteria upper bound.</para>
        ///   <para>Enabled—Check to include the criteria in the final suitability score.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于设置条件属性的输入要素。</para>
        ///   <para>条件 - 将用于计算适宜性分数的字段、点或变量。</para>
        ///   <para>标题 - 条件的名称。</para>
        ///   <para>权重 - 条件值对总体适宜性分数的影响。该数字必须大于或等于 0。</para>
        /// <para>影响 - 可以是正的、反向的或理想的。积极影响的一个例子如下：如果一个网站有更多持有研究生或专业学位的家庭，你希望它的得分更高。反向影响的一个例子如下：较低的房屋价值中位数更可取，因为它表明房屋负担能力更高。理想影响的一个例子是在一系列值中搜索区域。
        ///   <bulletList>
        ///     <bullet_item>正 - 条件值越高，适宜性分数越高。</bullet_item><para/>
        ///     <bullet_item>反转 - 条件值越低，适宜性分数越高。</bullet_item><para/>
        ///     <bullet_item>理想值 - 越接近理想值，分数越高。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>理想值 - 条件值越接近理想值，适宜性分数就越高。</para>
        ///   <para>最小值 - 为条件下限设置硬限制的数值。</para>
        ///   <para>最大值 （Maximum Value） - 为条件上限设置硬限制的数值。</para>
        ///   <para>已启用 - 选中以将条件包含在最终适宜性分数中。</para>
        /// </xdoc></para>
        /// </param>
        public SetCriteriaProperties(object _in_analysis_layer, object _criteria_properties)
        {
            this._in_analysis_layer = _in_analysis_layer;
            this._criteria_properties = _criteria_properties;
        }
        public override string ToolboxName => "Business Analyst Tools";

        public override string ToolName => "Set Criteria Properties";

        public override string CallName => "ba.SetCriteriaProperties";

        public override List<string> AcceptEnvironments => ["workspace"];

        public override object[] ParameterInfo => [_in_analysis_layer, _criteria_properties, _out_analysis_layer];

        /// <summary>
        /// <para>Input Suitability Analysis Layer</para>
        /// <para>The Suitability Analysis layer that will be used in the analysis.</para>
        /// <para>将在分析中使用的适宜性分析图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Suitability Analysis Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_analysis_layer { get; set; }


        /// <summary>
        /// <para>Criteria Properties</para>
        /// <para><xdoc>
        ///   <para>The input features that will be used to set up your criteria properties.</para>
        ///   <para>Criterion—The field, point, or variable that will be used to calculate your suitability score.</para>
        ///   <para>Title—The name of your criteria.</para>
        ///   <para>Weight—The influence a criteria value has on the overall suitability score. The number must be greater than or equal to 0.</para>
        ///   <para>Influence—Can be positive, inverse, or ideal. An example of a positive influence is as follows: You want a site to score higher if it has a greater number of households holding graduate or professional degrees. An example of an inverse influence is as follows: A lower median home value is more desirable as it is indicative of greater home affordability. An example of an ideal influence would be a search for areas within a range of values.
        ///   <bulletList>
        ///     <bullet_item>Positive—The higher the criteria value, the higher the suitability score.  </bullet_item><para/>
        ///     <bullet_item>Inverse—The lower the criteria value, the higher the suitability score.  </bullet_item><para/>
        ///     <bullet_item>Ideal—The closer to the ideal value, the higher the score.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>Ideal Value—The closer the criteria value is to the ideal value, the higher the suitability score.</para>
        ///   <para>Minimum Value—A numeric value that sets a hard limit for the criteria lower bound.</para>
        ///   <para>Maximum Value—A numeric value that sets a hard limit for the criteria upper bound.</para>
        ///   <para>Enabled—Check to include the criteria in the final suitability score.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>将用于设置条件属性的输入要素。</para>
        ///   <para>条件 - 将用于计算适宜性分数的字段、点或变量。</para>
        ///   <para>标题 - 条件的名称。</para>
        ///   <para>权重 - 条件值对总体适宜性分数的影响。该数字必须大于或等于 0。</para>
        /// <para>影响 - 可以是正的、反向的或理想的。积极影响的一个例子如下：如果一个网站有更多持有研究生或专业学位的家庭，你希望它的得分更高。反向影响的一个例子如下：较低的房屋价值中位数更可取，因为它表明房屋负担能力更高。理想影响的一个例子是在一系列值中搜索区域。
        ///   <bulletList>
        ///     <bullet_item>正 - 条件值越高，适宜性分数越高。</bullet_item><para/>
        ///     <bullet_item>反转 - 条件值越低，适宜性分数越高。</bullet_item><para/>
        ///     <bullet_item>理想值 - 越接近理想值，分数越高。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        ///   <para>理想值 - 条件值越接近理想值，适宜性分数就越高。</para>
        ///   <para>最小值 - 为条件下限设置硬限制的数值。</para>
        ///   <para>最大值 （Maximum Value） - 为条件上限设置硬限制的数值。</para>
        ///   <para>已启用 - 选中以将条件包含在最终适宜性分数中。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Criteria Properties")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _criteria_properties { get; set; }


        /// <summary>
        /// <para>Output Suitability Analysis Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Suitability Analysis Layer")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_analysis_layer { get; set; }


        public SetCriteriaProperties SetEnv(object workspace = null)
        {
            base.SetEnv(workspace: workspace);
            return this;
        }

    }

}